Cross-Validation এর মাধ্যমে Hyperparameter Tuning

Machine Learning - সাইকিট-লার্ন (Scikit-Learn) - Hyperparameter Tuning এবং Optimization
161

Hyperparameter Tuning হলো মেশিন লার্নিং মডেলের পারফরম্যান্স উন্নত করার একটি গুরুত্বপূর্ণ পদক্ষেপ, যেখানে মডেলের হাইপারপ্যারামিটারগুলো যেমন learning rate, n_estimators, max_depth, ইত্যাদি সঠিকভাবে নির্বাচন করা হয়। এই প্যারামিটারগুলো মডেলের আচরণকে নিয়ন্ত্রণ করে, তাই সেগুলির মান নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ।

Cross-validation হলো একটি শক্তিশালী কৌশল, যা মডেল ট্রেনিং এবং টেস্টিং ডেটার মধ্যে সঠিক বিভাজন নিশ্চিত করতে সহায়ক। Hyperparameter Tuning করার জন্য cross-validation ব্যবহার করলে আমরা মডেলের ভ্যালিডেশন স্কোরের গড় পাওয়া যায়, যা মডেলের সাধারণীকরণ ক্ষমতা (generalization ability) পরিমাপ করতে সহায়ক।

Cross-Validation এর মাধ্যমে Hyperparameter Tuning এর প্রক্রিয়া

১. ডেটা ভাগ করা (Train and Test Split): ডেটাকে train এবং test সেটে ভাগ করা হয়। ট্রেনিং সেটে মডেলটি প্রশিক্ষণ পায় এবং টেস্ট সেটে এটি পরীক্ষা করা হয়।

২. Hyperparameter গ্রিড তৈরি (Grid Search): বিভিন্ন হাইপারপ্যারামিটার মান নির্বাচন করা হয় এবং সেগুলোর জন্য একাধিক কম্বিনেশন তৈরি করা হয়। এটি একটি grid তৈরি করে, যেখানে প্রতিটি হাইপারপ্যারামিটার একটি নির্দিষ্ট মানের সেট নিয়ে কাজ করবে।

৩. Cross-Validation ব্যবহার:
k-fold cross-validation পদ্ধতি ব্যবহার করা হয়, যেখানে ডেটা k-টি ফোল্ডে ভাগ করা হয় এবং প্রতিটি ফোল্ডের জন্য মডেলটি প্রশিক্ষণ এবং পরীক্ষা করা হয়। এটি মডেলের পারফরম্যান্স আরও নির্ভুলভাবে পরিমাপ করতে সহায়ক।

৪. Best Hyperparameters নির্বাচন:
বিভিন্ন কম্বিনেশন এবং k-fold cross-validation এর স্কোর গড় করে, সবচেয়ে ভাল পারফরম্যান্স দেখানো হাইপারপ্যারামিটার কম্বিনেশন নির্বাচন করা হয়।


GridSearchCV: Cross-Validation এর মাধ্যমে Hyperparameter Tuning

Scikit-learn লাইব্রেরিতে GridSearchCV একটি জনপ্রিয় টুল, যা cross-validation এর মাধ্যমে hyperparameter tuning করতে সহায়ক।

GridSearchCV ব্যবহার করে Hyperparameter Tuning:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# ডেটা লোড করা (এখানে কৃত্রিম ডেটা ব্যবহার করা হচ্ছে)
X, y = ...  # আপনার ডেটা এখানে লোড করুন

# ট্রেন এবং টেস্ট ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# RandomForestClassifier তৈরি করা
rf = RandomForestClassifier()

# Hyperparameter গ্রিড তৈরি করা
param_grid = {
    'n_estimators': [10, 50, 100, 200],  # n_estimators এর মান
    'max_depth': [None, 10, 20, 30],      # max_depth এর মান
    'min_samples_split': [2, 5, 10],      # min_samples_split এর মান
    'min_samples_leaf': [1, 2, 4]         # min_samples_leaf এর মান
}

# GridSearchCV সেট আপ করা (k-fold Cross-validation)
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, n_jobs=-1, scoring='accuracy')

# GridSearchCV প্রশিক্ষণ
grid_search.fit(X_train, y_train)

# সেরা Hyperparameters এবং সেরা স্কোর দেখানো
print(f"Best Hyperparameters: {grid_search.best_params_}")
print(f"Best Cross-validation Accuracy: {grid_search.best_score_}")

# সেরা মডেল দিয়ে টেস্ট ডেটা পূর্বাভাস
best_rf = grid_search.best_estimator_
test_accuracy = best_rf.score(X_test, y_test)
print(f"Test Accuracy: {test_accuracy}")

RandomizedSearchCV: Hyperparameter Tuning

এছাড়া RandomizedSearchCV একটি বিকল্প পদ্ধতি যা GridSearchCV এর মতোই কাজ করে, তবে এটি নির্দিষ্ট একটি পরিসরের মধ্যে এলোমেলোভাবে হাইপারপ্যারামিটার মানের কম্বিনেশন নির্বাচন করে, ফলে এটি আরও দ্রুত এবং বড় ডেটাসেটের জন্য কার্যকর।

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint

# RandomForestClassifier তৈরি করা
rf = RandomForestClassifier()

# Hyperparameter গ্রিড তৈরি করা
param_dist = {
    'n_estimators': randint(10, 200),
    'max_depth': [None, 10, 20, 30],
    'min_samples_split': randint(2, 10),
    'min_samples_leaf': randint(1, 10)
}

# RandomizedSearchCV সেট আপ করা (k-fold Cross-validation)
random_search = RandomizedSearchCV(estimator=rf, param_distributions=param_dist, n_iter=100, cv=5, random_state=42, n_jobs=-1)

# RandomizedSearchCV প্রশিক্ষণ
random_search.fit(X_train, y_train)

# সেরা Hyperparameters এবং সেরা স্কোর দেখানো
print(f"Best Hyperparameters: {random_search.best_params_}")
print(f"Best Cross-validation Accuracy: {random_search.best_score_}")

# সেরা মডেল দিয়ে টেস্ট ডেটা পূর্বাভাস
best_rf_random = random_search.best_estimator_
test_accuracy_random = best_rf_random.score(X_test, y_test)
print(f"Test Accuracy: {test_accuracy_random}")

Key Points to Remember

  • GridSearchCV: এটি মডেলের জন্য বিভিন্ন হাইপারপ্যারামিটার মানের সব সম্ভাব্য কম্বিনেশন চেষ্টা করে। এটি নির্দিষ্ট পরিসরে খোঁজার মাধ্যমে সেরা হাইপারপ্যারামিটার সেট নির্বাচন করে, তবে এটি তুলনামূলকভাবে ধীর হতে পারে।
  • RandomizedSearchCV: এটি এলোমেলোভাবে হাইপারপ্যারামিটার নির্বাচন করে এবং কিছু সময়ে এটি দ্রুততার সাথে ভাল ফলাফল প্রদান করতে পারে, কারণ এটি সমস্ত সম্ভাব্য কম্বিনেশন পরীক্ষা করে না।
  • Cross-Validation: এটি মডেলের সাধারণীকরণ ক্ষমতা (generalization ability) মূল্যায়ন করতে সহায়ক, যাতে মডেলটি অতিরিক্ত প্রশিক্ষিত (overfitting) না হয় এবং নতুন ডেটার উপর ভাল পারফরম্যান্স দেখাতে পারে।

সারাংশ

Hyperparameter Tuning এর মাধ্যমে মডেলের সঠিক হাইপারপ্যারামিটার সেট নির্বাচন করা হয়, যা মডেলের পারফরম্যান্স বৃদ্ধি করতে সহায়ক। GridSearchCV এবং RandomizedSearchCV এর মাধ্যমে cross-validation ব্যবহারের মাধ্যমে এই tuning প্রক্রিয়া করা হয়, যা মডেলের ভ্যালিডেশন স্কোর এবং সাধারণীকরণ ক্ষমতা নিশ্চিত করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...